// 接口
// 1、不能定义实例字段
// 2、接口中所有的方法默认是public abstract的，可以省略
// 3、可以定义default方法 和static方法
// 4、一个类可以implements多个接口，只能extends一个类
interface Person {
    void run();

    default void do_some_thing() {
        System.out.println("Person.do_some_thing");
        this.run();
    }
}

class Student implements Person {
    @Override
    public void run() {
        System.out.println("Student.run");
    }
}

class Worker implements Person {
    @Override
    public void run() {
        System.out.println("Worker.run");
    }
}

// 接口的继承
interface OtherInterface extends Person {
    void other_method();
}

public class Test {
    public static void main(String[] args) {
        // Person接口无法被实例化，但是可以作为类型使用
        Person p = new Student(); // 多态依旧成立
        p.run(); // Student.run
        p = new Worker();
        p.run(); // Worker.run

        p.do_some_thing();
    }
}